有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java logback。xml:仅覆盖一个类的根级别

给定logback中的以下根。xml:

<root level="INFO">
    <appender-ref ref="FILE" />
    <appender-ref ref="STDOUT" />
</root>

定义以下日志记录规则:

<logger name="com.myproject.mypackage.MyClass" level="DEBUG">
   <appender-ref ref="STDOUT" />
</logger>

myclass中的日志级别不会被调试,因为根级别是info。但我只想在这个特定类中查看调试日志。在不改变根级别(这会导致应用程序到处吐调试日志)的情况下,这是可以实现的吗

编辑:我也试过这个:

<logger name="com.myproject" level="INFO"/>
<logger name="com.myproject.mypackage.MyClass" level="DEBUG">

<root level="DEBUG">
    <appender-ref ref="FILE" />
    <appender-ref ref="STDOUT" />
</root>

因此,我们的想法是将root设置为debug,这样所有内容都是debug,但将所有内容都设置为'com'。myproject'设置为info,因此日志级别实际上是info,但将MyClass设置为DEBUG。它不起作用:(


共 (1) 个答案

  1. # 1 楼答案

    “根”级别不限制其他记录器的级别,它只设置默认值。所以<root level="INFO"><logger name="some.name" level="DEBUG">完全适合在一起,您不需要放松“根”级别。因此,这两个示例都应该登录名为com.myproject.mypackage.MyClass的记录器的调试级别。因此,如果您的配置记录了一些内容,而不是从com.myproject.mypackage.MyClass记录,那么问题应该在另一个地方

    此外,如果您希望某些记录器仅登录到其自己的appender,如第一个示例中所示,则应在logger上使用additivity="false"属性,否则它将同时登录到根appender和特定于记录器的appender

    例如:

    import org.slf4j.LoggerFactory;
    
    class Scratch {
        public static void main(String[] args) {
            LoggerFactory.getLogger("some.logger").info("info msg");
            LoggerFactory.getLogger("another.logger").info("info msg");
            LoggerFactory.getLogger("another.logger").error("error msg");
        }
    }
    

    向后退。xml:

    <configuration>
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>STDOUT: %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <appender name="STDOUT2" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>STDOUT2: %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <logger name="some.logger" level="info" additivity="false">
            <appender-ref ref="STDOUT2" />
        </logger>
    
        <root level="error">
            <appender-ref ref="STDOUT" />
        </root>
    </configuration>
    

    结果:

    STDOUT2: 16:58:58.973 [main] INFO  some.logger - info msg
    STDOUT: 16:58:58.979 [main] ERROR another.logger - error msg